package login

import (
	"fmt"
	"github.com/flipped-aurora/gin-vue-admin/server/model/common/response"
	request2 "github.com/flipped-aurora/gin-vue-admin/server/model/entity/system/request"
	"github.com/flipped-aurora/gin-vue-admin/server/model/entity/user/request"
	"github.com/flipped-aurora/gin-vue-admin/server/utils"
	"github.com/gin-gonic/gin"
	jwt "github.com/golang-jwt/jwt/v4"
	"time"
)

// 登录业务
type LoginApi struct{}

// 登录的接口处理
func (api *LoginApi) ToLogined(c *gin.Context) {

}

func (api *LoginApi) LoginWxMobile(c *gin.Context) {
	// 获取参数
	var params request.MobileStrut
	if c.ShouldBind(&params) != nil {
		response.FailWithMessage("参数绑定有误", c)
		return
	}

	// 解密手机号
	wxInfo, err3 := userService.ParserWxPhone(params)
	if err3 != nil {
		// 如果参数注入失败或者出错就返回接口调用这。出错了.
		response.FailWithMessage(err3.Error(), c)
		return
	}

	// 根据手机号查询用户
	user, err := userService.GetUserByPhone(wxInfo.Mobile)
	if err != nil {
		// 如果参数注入失败或者出错就返回接口调用这。出错了.
		response.FailWithMessage(err.Error(), c)
		return
	}
	// 如果不存在用户则注册新用户
	if user.ID == 0 {
		// 注册新用户
		user, err = userService.CreatVisiter(wxInfo)
		if err != nil {
			// 如果参数注入失败或者出错就返回接口调用这。出错了.
			response.FailWithMessage(err.Error(), c)
			return
		}
	}

	// 1: jwt生成token
	myJwt := utils.NewJWT()

	// 2: 生成token
	token, err2 := myJwt.CreateTokenWeixin(request2.CustomClaimsWeixin{
		user.ID,
		user.Name,
		int64(1545),
		jwt.RegisteredClaims{
			Audience:  jwt.ClaimStrings{"KSD"},                                                // 受众
			Issuer:    "KSD-ADMIN",                                                            // 签发者
			IssuedAt:  jwt.NewNumericDate(time.Now()),                                         // 签发时间
			NotBefore: jwt.NewNumericDate(time.Now().Add(-10 * time.Second)),                  // 生效时间
			ExpiresAt: jwt.NewNumericDate(time.Now().Add(1 * time.Second * 60 * 60 * 24 * 7)), // 过期时间
		},
	})

	fmt.Println("当前时间是：", time.Now().Unix())
	fmt.Println("签发时间：" + time.Now().Format("2006-01-02 15:04:05"))
	fmt.Println("生效时间：" + time.Now().Add(-10*time.Second).Format("2006-01-02 15:04:05"))
	fmt.Println("过期时间：" + time.Now().Add(1*time.Second*60*60*24*7).Format("2006-01-02 15:04:05"))

	if err2 != nil {
		response.FailWithMessage("登录失败，token颁发不成功!", c)
	}

	fmt.Println("token：" + token)
	response.OkWithData(map[string]any{"user_id": user.ID, "user_info": user, "token": token}, c)

}
